// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import $ from 'jquery'
// 引入axios
import axios from 'axios'
// 引入store
import store from './store/index'
// 引入elementui相关代码
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
// 引入vant-ui
import Vant from 'vant';
import 'vant/lib/index.css';

Vue.use(ElementUI);
Vue.use(Vant);


// 创建仓库（store）
// const store = new Vuex.Store({
//   // 定义状态的原数据，初始化
//   state: {
//     username: 'Tom',
//     age: 18,
//     num: 0,
//     goods: [
//       {
//         name: 'iphone',
//         price: 8999,
//         num: 12
//       },
//       {
//         name: 'huawei',
//         price: 6999,
//         num: 25
//       },
//       {
//         name: 'xiaomi',
//         price: 4799,
//         num: 82
//       }
//     ]
//   },
//   // 类似vue中的computed，对原数据加工
//   getters: {
//     // 通过getters计算总金额
//     getTotalPrice: function(state) {
//       let num = 0;
//       state.goods.forEach(item => {
//         num += item.price * item.num
//       })
//       return num
//     }
//   },
//   // 修改数据的唯一方式，同步的
//   mutations: {
//     // 最简单的方式
//     setAge(state) {
//       state.age += 5;
//       // 更新localStorage
//     },
//     // 比较复杂的方式
//     setMsg(state, val) {
//       state.age = val;
//       // 更新localStorage
//     },
//     // 最复杂的方式
//     setNum(state, payload){
//       // payload中包含了所有的信息，先打印一下看
//       console.log(payload);
//       state.num = payload.newVal;
//       // 更新localStorage
//       localStorage.setItem('num', payload.newVal);
//     }
//   },
//   // 异步修改数据
//   actions: {
//     // 获取积分
//     async getPoint ({ commit }) {
//       // getPointData()是网络请求
//       await commit('getPoint',  getPointData())
//     },
//     // 获取等级，依赖积分，需要先执行获取积分的方法
//     // 如果只是获取积分，就不需要getLevel这部分代码
//     // 想要获取等级，需要先获取积分，严格按照先后顺序，不能错，
//     // 所以await getPoint，完成后才能 commit('getLevel',  getLevelData())
//     async getLevel ({ dispatch, commit }) {
//       // 等待 getPoint 完成，就有了积分，然后才能获取等级
//       await dispatch('getPoint') 
//       // getLevelData()是网络请求
//       commit('getLevel',  getLevelData())
//    }
//   },
//   // 分模块
//   modules: {

//   }
// })

// 全局前置守卫
// router.beforeEach((to, from, next) => {
//   console.log('===============');
//   console.log(to);
//   console.log(from);
//   console.log('===============');
//   next();
// })
Vue.config.productionTip = false
// new一个空的实例，作为事件总线，管理非父子组件传值
Vue.prototype.bus = new Vue()
// 将jq的代表$添加到vue上，就可以全局使用了
Vue.prototype.$ = $

// 使用axios,这种方式是额外添加了axios方法到Vue中，
// 也可以写成： Vue.prototype.$http = axios,用axios替换原有的http模块
Vue.prototype.axios = axios
// this.axios.get('sssss/ssss')
//   .then(res => {
//     console.log(res)
//   })
//   .catch(err => {
//     console.log(err)
//   })

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  //  添加token
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response;
}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error);
});

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  store
})
